<template>
    <div>
        <h1>人员列表</h1>
        <h3 style="color:red">Count组件求和为:{{ sum }}</h3>
        <h3 style="color:red">列表中第一个人名字:{{ firstPersonName }}</h3>
        <input type="text" placeholder="请输入名字" v-model="name">
        <button @click='add'>添加</button>
        <button @click='addWang'>添加一个姓王的人</button>
        <button @click='addPersonServer'>通过服务添加一个人</button>
        <ul>
            <li v-for="p in personList" :key="p.id">{{ p.name }}</li>
        </ul>
    </div>
</template>

<script>
    import {nanoid} from 'nanoid'
    export default {
        name: "Person",
        data() {
            return {
                name: ""
            }
        },
        computed: {
            personList(){
                return this.$store.state.personAbout.personList
            },
            // 或者使用如下方法实现
            // ...mapState({ personList :'personList'})
            sum(){
                return this.$store.state.countAbout.sum
            },
            firstPersonName(){
                return this.$store.getters['personAbout/firstPersonName']
            },
        },
        methods: {
            add(){
                const personObj = {id: nanoid(), name: this.name}
                console.log(personObj)
                // 调用的是mutations中的方法，所以使用的是commit方法，不需要调用dispatch
                this.$store.commit('personAbout/ADD_PERSON',personObj)
                this.name =""
            },
            addWang(){
                const personObj = { id: nanoid(), name: this.name }
                // 调用的是actions中的方法，所以使用的是dispatch方法,第一个参数需要带上 personAbout/ 前缀
                // 与mapActions 调用不同，这里需要使用前缀法，需要带上personAbout/，才可以访问personAbout内的方法addPersonWang
                this.$store.dispatch('personAbout/addPersonWang', personObj)
                this.name = ''
            },
            addPersonServer() {
                this.$store.dispatch('personAbout/addPersonServer')
            }
        }

    }
</script>


<style>

</style>